package co.edu.uniquindio.ejb;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

import co.edu.uniquindio.dao.AdministradorDao;
import co.edu.uniquindio.dao.ColorDao;
import co.edu.uniquindio.dao.MarcaDao;
import co.edu.uniquindio.dao.ModeloDao;
import co.edu.uniquindio.dao.MotorDao;
import co.edu.uniquindio.dao.PaisDao;
import co.edu.uniquindio.ejbremotos.ParametrizadaEjbRemote;
import co.edu.uniquindio.logica.Administrador;
import co.edu.uniquindio.logica.Color;
import co.edu.uniquindio.logica.Marca;
import co.edu.uniquindio.logica.Modelo;
import co.edu.uniquindio.logica.Motor;

/**
 * Session Bean implementation class EjbPametrizada
 * El proposito de esta clase es el proveer las funcionalidades
 * del aplicativo referentes a un automovil a las cuales tienen
 * acceso los usuarios ocultando la capa del nivel de persistencia 
 * del funcionamiento del aplicativo.
 * @author Andres Felipe Abril 
 * @author Luis Enrique Robledo
 */
@Stateless
@LocalBean
public class ParametrizadaEjb implements ParametrizadaEjbRemote {

	/**
	 * este atributo es un instancia de la clase ModeloDao
	 */
	@EJB
	private ModeloDao modeloDao;
	/**
	 * este atributo es un instancia de la clase MotorDao
	 */
	@EJB
	private MotorDao motorDao;
	/**
	 * este atributo es un instancia de la clase ColorDao
	 */
	@EJB
	private ColorDao colorDao;
	/**
	 * este atributo es un instancia de la clase MarcaDao
	 */
	@EJB
	private MarcaDao marcaDao;
	/**
	 * este atributo es una instancia de la clase AdministradorDao
	 */
	@EJB
	private AdministradorDao administradorDao;
	/**
	 * este atributo es una instancia de la clase PaisDao
	 */
	@EJB
	private PaisDao paisDao;
	/**
	 * Default constructor. 
	 */
	public ParametrizadaEjb() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * este metodo me permite agregar una marca
	 * @param la nueva marca
	 * @throws java.lang.Exception
	 */
	public void agregarMarca(Marca marca)throws Exception
	{
		Marca marca2 =marcaDao.findByKey(marca.getNombre());
		if(marca2== null)
			marcaDao.insert(marca);
		else
			throw new Exception("la marca ya existe");

	}
	/** 
	 * este metodo me permite eliminar una marca 
	 * @param nombreM nombre de la marca
	 * @throws Exception
	 */
	public void eliminarMarca(String nombreM)throws Exception
	{
		Marca marca=marcaDao.findByKey(nombreM);
		if(marca!=null)
			marcaDao.remove(marca);
		else
			throw new Exception("la marca no existe");
	}
	/**
	 * esta  metodo  permite agregar un  modelo 
	 * @param el nuevo modelo
	 * @throws java.lang.Exception
	 */
	public void agregarModelo(Modelo modelo) throws java.lang.Exception 
	{

		if(modelo.getMarca()!= null ){

			Marca miMarca = marcaDao.findByKey( modelo.getMarca().getNombre() );
			Modelo modelo1= modeloDao.findByKey(modelo.getNombre());
			if(modelo1==null)
			{
				if( miMarca==null)
					marcaDao.insert(miMarca);
				modeloDao.insert(modelo);
			}
			else
				throw new java.lang.Exception("el modelo ya existe por favor verifique los datos");
		}   
		else
			throw new java.lang.Exception("debe ingresar una marca");
	}
	/**
	 * este metodo permite eliminar un modelo
	 * @param nombre
	 * @throws Exception
	 */
	public void eliminarModelo(String nombre)throws Exception
	{
		Modelo modelo=modeloDao.findByKey(nombre);
		if(modelo!=null)
			modeloDao.remove(modelo);
		else
			throw new java.lang.Exception("el modelo no existe por favor veriifique los datos");
	}
	/**
	 * este metodo permite agregar un color 
	 * @param el nuevo color
	 * @throws java.lang.Exception
	 */
	public void agregarColor(Color color) throws Exception
	{
		Color color1= colorDao.findByKey(color.getCodigo()); 
		if(color1==null)
			colorDao.insert(color);
		else
			throw new Exception("el color ya existe por favor verifique los datos");
	}
	/**
	 * este metodo permite eliminar un color
	 * @param codigo del color
	 * @throws Exception
	 */
	public void eliminarColor(int codigo)throws Exception
	{
		Color color = colorDao.findByKey(codigo);
		if(color!=null)
			colorDao.remove(color);
		else
			throw new Exception("el color no existe por favor verifique los datos");
	}
	/**
	 * este metodo permite agregar un  motor 
	 * @param el nuevo motor
	 * @throws java.lang.Exception
	 */
	public void agregarMotor(Motor motor)throws Exception
	{
		Motor motor1=motorDao.findByKey(motor.getReferencia());
		if(motor1==null)		
			motorDao.insert(motor);
		else
			throw new Exception("el motor ya existe por favor verifique los datos");
	}
	/**
	 * este metodo permite eliminar un motor
	 * @param ref: referencia del motor
	 * @throws Exception
	 */
	public void eliminarMotor(int ref)throws Exception
	{
		Motor motor1=motorDao.findByKey(ref);
		if(motor1!=null)		
			motorDao.remove(motor1);
		else
			throw new Exception("el motor no existe por favor verifique los datos");
	}
	/**
	 * este metodo permite crear un administrador 
	 * @param admin
	 * @throws Exception
	 */
	public void agregarAdministrador(Administrador admin)throws Exception
	{
		Administrador admin2=administradorDao.findByKey(admin.getContrasenia());
		if(admin2== null)
			administradorDao.insert(admin);
		else
			throw new  Exception("el administrador ya existe");
	}
	/**
	 * este metodo me permite eliminar a un adminstrador
	 * @param contraseña del administrador
	 * @throws Exception
	 */
	public void eliminarAdministrador(String contraseña)throws Exception
	{
		Administrador admin2=administradorDao.findByKey(contraseña);
		if(admin2!= null)
			administradorDao.remove(admin2);
		else
			throw new  Exception("el administrador no existe por favor verifique los datos");
	}


	public Administrador validarA(String contrasenia)throws Exception
	{
		Administrador admin=administradorDao.findByKey(contrasenia);
		if(admin!=null)
			return admin;
		else
			throw new  Exception("el administrador no existe por favor verifique los datos");
	}
}
